#import "ParametersController.h"
#import "SelectionController.h"
#import "Repository.h"
#import "Cliente.h"
#import "Fabrica.h"
#import "Vendedor.h"
#import "Transportadora.h"
#import "SelectableModel.h"
#import "PedidoSearchController.h"
#import "RepositoryProvider.h"

@interface ParametersController () <SelectionDelegate>
@property (weak, nonatomic) IBOutlet UILabel *clienteLabel;
@property (weak, nonatomic) IBOutlet UILabel *fabricaLabel;
@property (weak, nonatomic) IBOutlet UILabel *vendedorLabel;
@property (weak, nonatomic) IBOutlet UILabel *transportadoraLabel;
@property (strong, nonatomic) Cliente* cliente;
@property (strong, nonatomic) Fabrica* fabrica;
@property (strong, nonatomic) Vendedor* vendedor;
@property (strong, nonatomic) Transportadora* transportadora;
@property (strong, nonatomic) RepositoryProvider* repositoryProvider;
@end

@implementation ParametersController

@synthesize repositoryProvider;
@synthesize clienteLabel;
@synthesize fabricaLabel;
@synthesize vendedorLabel;
@synthesize transportadoraLabel;
@synthesize cliente = _cliente;
@synthesize fabrica = _fabrica;
@synthesize vendedor = _vendedor;
@synthesize transportadora = _transportadora;

-(void)setCliente:(Cliente *)cliente {
    _cliente = cliente;
    self.clienteLabel.text = cliente ? cliente.razaoSocial : @"-- Todos --";
}

-(void)setFabrica:(Fabrica *)fabrica {
    _fabrica = fabrica;
    self.fabricaLabel.text = fabrica ? fabrica.nome : @"-- Todas --";
}

-(void)setVendedor:(Vendedor *)vendedor {
    _vendedor = vendedor;
    self.vendedorLabel.text = vendedor ? vendedor.nome : @"-- Todos --";
}

-(void)setTransportadora:(Transportadora *)transportadora {
    _transportadora = transportadora;
    self.transportadoraLabel.text = transportadora ? transportadora.nome : @"-- Todas --";
}

-(void)viewDidLoad {
    [self clearSelection:nil];
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.destinationViewController isKindOfClass:[SelectionController class]]) {
        SelectionController* selectionController = (SelectionController*) segue.destinationViewController;
        selectionController.delegate = self;
        selectionController.repositoryProvider = self.repositoryProvider;
        if ([segue.identifier isEqualToString:@"selectCliente"]) {
            selectionController.repository = [self.repositoryProvider getRepositoryForClass:[Cliente class]];
            selectionController.title = @"Clientes";
            selectionController.infoSegueIdentifier = @"toClienteInfo";
        } else if ([segue.identifier isEqualToString:@"selectFabrica"]) {
            selectionController.repository = [self.repositoryProvider getRepositoryForClass:[Fabrica class]];
            selectionController.title = @"Fábricas";
            selectionController.infoSegueIdentifier = @"toFabricaInfo";
        } else if ([segue.identifier isEqualToString:@"selectVendedor"]) {
            selectionController.repository = [self.repositoryProvider getRepositoryForClass:[Vendedor class]];
            selectionController.title = @"Vendedores";
            selectionController.infoSegueIdentifier = @"toVendedorInfo";
        } else if ([segue.identifier isEqualToString:@"selectTransportadora"]) {
            selectionController.repository = [self.repositoryProvider getRepositoryForClass:[Transportadora class]];
            selectionController.title = @"Transportadoras";
            selectionController.infoSegueIdentifier = @"toTransportadoraInfo";
        }
    }
    else if ([segue.identifier isEqualToString:@"searchPedidos"]) {
        PedidoSearchController* pedidoSearchController = segue.destinationViewController;
        pedidoSearchController.repositoryProvider = self.repositoryProvider;
        pedidoSearchController.cliente = self.cliente;
        pedidoSearchController.fabrica = self.fabrica;
        pedidoSearchController.vendedor = self.vendedor;
        pedidoSearchController.transportadora = self.transportadora;
    }
}

-(void)selectionResponse:(id<SelectableModel>)selectedModel {
    if ([selectedModel isKindOfClass:[Cliente class]]) {
        self.cliente = selectedModel;
    } else if ([selectedModel isKindOfClass:[Fabrica class]]) {
        self.fabrica = selectedModel;
    } else if ([selectedModel isKindOfClass:[Vendedor class]]) {
        self.vendedor = selectedModel;
    } else if ([selectedModel isKindOfClass:[Transportadora class]]) {
        self.transportadora = selectedModel;
    }
    [self.navigationController popViewControllerAnimated:YES];
}

-(void)setSettings:(Settings *)settings {
    self.repositoryProvider = [RepositoryProvider repositoryProviderWithSettings:settings];
}

- (IBAction)clearSelection:(id)sender {
    self.cliente = nil;
    self.fabrica = nil;
    self.vendedor = nil;
    self.transportadora = nil;
}

@end
